//永恒戳一戳插件
//plugins/Yongheng-plugin/resources/maomao，里面存放jpg和gif图片
//图片命名规则“1.jpg”，“2.gif”，以数字顺序保存，默认自带猫猫表包需要自己更换。
// 回复文字列表在中间   '',   按照该格式中间添加文本即可。

import plugin from '../../../lib/plugins/plugin.js';
import cfg from '../../../lib/config/config.js'
import common from '../../../lib/common/common.js'
import fs from 'fs'
import path from 'path'
import fetch from 'node-fetch'


// 回复文字列表
const wordList = ['不要戳了，再戳就坏掉啦>_<', '正在关闭对您的所有服务...关闭成功', '连个可爱美少女都要戳的肥宅真恶心啊', '可恶，该死的咸猪手', '是不是要可爱的我，揍你一顿才开心，哼', '你戳的我有点开心奖励你哦', '你要是在戳我！！我~我就打你哼', '可以不要戳了吗你好烦啊变态~变态', '只是刚好路过而已，才不是因为你戳我特地来看你的呢！你可不要异想天开', '我在哦！是有什么事情吗？', '戳戳戳~希望你能有点自知之明，认识到超级无敌可爱的我', '我发脾气了~气死我了', '不准戳', '群主大人快来鸭~有人欺负我', '总之你是个大笨蛋啦', '讨厌死了', '我……我……才不是傲娇呢' ]


const chuoPath = path.join(process.cwd(), 'plugins/Yongheng-plugin/resources/maomao/')
let jpgNumber = 0
let gifNumber = 0

function updateImageNumber() {
  return new Promise((resolve, reject) => {
    fs.readdir(chuoPath, (err, files) => {
      if (err) reject(err)
      else {
        jpgNumber = files.filter(file => /\.(jpg|jpeg)$/i.test(file)).length
        gifNumber = files.filter(file => /\.gif$/i.test(file)).length
        resolve()
      }
    })
  })
}

async function init() {
  try {
    if (!fs.existsSync(chuoPath)) {
      fs.mkdirSync(chuoPath)
    }
    await updateImageNumber()
    fs.watch(chuoPath, (eventType, filename) => {
      console.log(`图片 ${filename} ${eventType}`)
      updateImageNumber().catch(console.error)
    })
  } catch (err) {
    console.error(`读取 ${chuoPath} 目录失败`, err)
  }
}
init()

// 在这里设置事件概率，请保证概率加起来小于1，少于1的部分会触发反击
const probabilityConfigs = [
  {
    name: '文字回复',
    rate: 0.3,
    handler: async e => {
      const textNumber = Math.floor(Math.random() * wordList.length)
      await e.reply(wordList[textNumber])
    }
  },
  {
    name: '图片回复',
    rate: 0.3,
    handler: async e => {
      const photoNumber = Math.floor(Math.random() * (jpgNumber + gifNumber)) + 1
      const imageType = photoNumber <= jpgNumber ? 'jpg' : 'gif'
      await e.reply(segment.image(`file:///${chuoPath}${photoNumber}.${imageType}`))
    }
  },
  {
    name: '禁言',
    rate: 0.3,
    handler: async e => {
      const muteType = Math.ceil(Math.random() * 2)
      if (muteType === 1) {
        await e.reply('我把你关小黑屋啦！')
        await common.sleep(1000)
        await e.group.muteMember(e.operator_id, 600)
        await common.sleep(3000)
        await e.reply('关10分钟哦！')
      } else {
        await e.reply('你还戳？')
        await common.sleep(500)
        await e.reply('忍不了啦！')
        await common.sleep(500)
        await e.reply('我直接关你小黑屋！')
        await common.sleep(1000)
        await e.group.muteMember(e.operator_id, 600)
      }
    }
  },
  {
    name: '反击',
    rate: 0.1,
    handler: async e => {
      await e.reply('我要戳回去了哦！')
      await common.sleep(1000)
      await e.group.pokeMember(e.operator_id)
    }
  }
]

export class ChuoPlugin extends plugin {
  constructor() {
    super({
      name: '戳一戳',
      dsc: '收到戳一戳消息时会触发此插件',
      event: 'notice.group.poke',
      priority: 5000,
      rule: [{ fnc: 'onPoke' }]
    })
  }

  async onPoke(e) {
    if (e.target_id !== cfg.qq) return

    let rateSum = 0
    const probabilityMap = {}
    probabilityConfigs.forEach(config => {
      const { rate, handler } = config
      probabilityMap[config.name] = { rate, handler }
      rateSum += rate
    })

    const randomNum = Math.random() * rateSum
    let curRateSum = 0
    for (const name in probabilityMap) {
      const { rate, handler } = probabilityMap[name]
      curRateSum += rate
      if (randomNum < curRateSum) {
        await handler(e)
        return
      }
    }
  }
}
